#include "stdafx.h"
#include "pywindow.h"

#include "pane.h"
#include "directui.h"

#include <gtl/script/pyscript.h>
#include <gtl/directui/visitor.h>

namespace gtl
{

namespace dui
{

directui* pywindow::m_directui = NULL;

pywindow::pywindow()
{

}

void pywindow::close(const std::string& id)
{

}

void pywindow::show(const std::string& id)
{
	pane* pane_ptr = get_pane(id);
	if(pane_ptr == NULL)
		return;

	return pane_ptr->show();
}

void pywindow::hide(const std::string& id)
{
	pane* pane_ptr = get_pane(id);
	if(pane_ptr == NULL)
		return;

	return pane_ptr->hide();
}

void pywindow::move(const std::string& id, int x, int y, int width, int height)
{
	pane* pane_ptr = get_pane(id);
	if(pane_ptr == NULL)
		return;

	pane_ptr->move(gtl::rect_f(x, y, x + width, y + height));
}

bool pywindow::visible(const std::string& id)
{
	pane* pane_ptr = get_pane(id);
	if(pane_ptr == NULL)
		return false;

	return pane_ptr->visible();
}

void pywindow::alert(const std::string& text, const std::string& caption)
{
	HWND hWnd = NULL;
	std::string strCaption = caption;
	if(m_directui != NULL && m_directui->get_main_wnd() != NULL)
	{
		hWnd = m_directui->get_main_wnd();
		if(hWnd != NULL && caption.empty())
		{
			char szCaption[MAX_PATH] = {0};
			::GetWindowTextA(hWnd, szCaption, MAX_PATH);
			strCaption = szCaption;
		}
	}

	::MessageBoxA(hWnd, text.c_str(), strCaption.c_str(), MB_OK);
}

std::string pywindow::attrib(const std::string& id, const std::string& attrb)
{
	pane* pane_ptr = get_pane(id);
	if(pane_ptr == NULL)
		return 0;

#ifdef UNICODE
	return pane_ptr->attrib(gtl::tstr(attrb)).trans().c_str();
#else
	return pane_ptr->attrib(attrb).c_str();
#endif
}

unsigned long pywindow::hwnd(const std::string& id)
{
	return 0;
}

void pywindow::rect(const std::string& id)
{

}

int pywindow::width(const std::string& id)
{
	pane* pane_ptr = get_pane(id);
	if(pane_ptr == NULL)
		return 0;

	return pane_ptr->rect().width;
}

int pywindow::height(const std::string& id)
{
	pane* pane_ptr = get_pane(id);
	if(pane_ptr == NULL)
		return 0;

	return pane_ptr->rect().width;
}

void pywindow::position(const std::string& id)
{

}

void pywindow::set_directui_ptr(directui* directui_ptr)
{
	m_directui = directui_ptr;
}

pane* pywindow::get_pane(const std::string& id)
{
	if(m_directui == NULL)
		return NULL;

#ifdef UNICODE
	return m_directui->get_pane(gtl::str(id).trans());
#else
	return m_directui->get_pane(id.c_str());
#endif
}

} // end of namespace dui

} // end of namespace gtl
